# 作者: 赵若云
# 2025年02月18日15时51分33秒
# 3478783573@qq.com

# name={“key”：value
#      }的形式
# xiaoming = {"name": "小明",
#             "age": 18,
#             "gender": True,
#             "height": 1.75}
# 字典无序

def use_dict():
    """
    字典的增删查改
    :return:
    """
    xiaoming_dict = {"name": "小明"}
    print(f'id(xiaoming_dict)={id(xiaoming_dict)}')
    print('-' * 50)
    # 1. 取值
    print(xiaoming_dict["name"])
    # 在取值的时候，如果指定的key不存在，程序会报错！KeyError: 'name123'
    # print(xiaoming_dict["name123"])
    print(xiaoming_dict.get("name123"))  # get安全地获取字典里的值，不会报错
    print('-' * 50)

    # 2. 增加/修改
    # 如果key不存在，会新增键值对
    xiaoming_dict["age"] = 18  # 增
    # 如果key存在，会修改已经存在的键值对
    xiaoming_dict.setdefault('name', '小小明')  # 不会覆盖前面的内容
    print(xiaoming_dict)

    xiaoming_dict["name"] = "小小明"  # 覆盖了前面的内容
    print(xiaoming_dict)
    print(f'id(xiaoming_dict)={id(xiaoming_dict)}')
    print('-' * 50)

    # 3. 删除
    print(xiaoming_dict)
    xiaoming_dict.pop("name")
    # 在删除指定键值对的时候，如果指定的key不存在，程序会报错！
    # xiaoming_dict.pop("name123")
    print(xiaoming_dict)
    print(f'id(xiaoming_dict)={id(xiaoming_dict)}')

    print('-' * 50)

    xiaoming_dict = {"name": "小明",
                     "age": 18}
    # 1. 统计键值对数量
    print(len(xiaoming_dict))
    # 2. 合并字典
    temp_dict = {"height": 1.75,
                 "age": 20}
    # 注意：如果被合并的字典中包含已经存在的键值对，会覆盖原有的键值对
    xiaoming_dict.update(temp_dict)  # 更新会改变地址
    print(f'id(xiaoming_dict)={id(xiaoming_dict)}')
    # 3. 清空字典
    xiaoming_dict.clear()
    print(xiaoming_dict)


def use_dict_iter():
    xiaoming_dict = {"name": "小明",
                     "qq": "123456",
                     "phone": "10086"}
    # 迭代遍历字典
    # 变量k是每一次循环中，获取到的键值对的key
    for k in xiaoming_dict:
        print(k)
    print('-' * 50)
    # values是内容
    for v in xiaoming_dict.values():
        print(v)
    print('-' * 50)
    # items是每一项
    for kv in xiaoming_dict.items():
        print(kv)


def use_list_dict():
    card_list = [{"name": "张三",
                  "qq": "12345",
                  "phone": "110"},
                 {"name": "李四",
                  "qq": "54321",
                  "phone": "10086"}
                 ]
    for card in card_list:
        print(card)
    print('-' * 50)

    for card in card_list:
        for k, v in card.items():  # card在这里是字典，所以要其中的内容（，）则要加上“.items”
            print(k, v)
        print('-' * 50)

# use_dict()
# use_dict_iter()
# use_list_dict()
